#!/usr/bin/env python
# -*- coding: UTF-8 -*-
"""
@Project ：python_learning 
@File ：模版方式模式.py
@IDE  ：PyCharm 
@Author ：李涵彬
@Date ：2024/3/1 23:20 
"""

"""
模板方法模式 (Template Method Pattern)
模板方法模式是一种行为型设计模式，它定义了一个算法的骨架，将具体步骤的实现延迟到子类。这样一来，子类可以在不改变算法结构的情况下重新定义算法中的某些步骤。

在 Python 中，模板方法模式通常通过一个抽象类来定义算法的骨架，以及一些具体子类来实现具体步骤。以下是一个简单的示例：

在这个示例中，AbstractClass 是抽象类，定义了算法的骨架，其中包含了模板方法 template_method 和一些抽象步骤方法 step1、step2、step3。具体子类 ConcreteClassA 和 ConcreteClassB 分别实现了这些抽象步骤方法。

客户端代码创建具体子类的对象并调用模板方法，从而执行算法的骨架。具体步骤的实现由子类负责。

模板方法模式适用于多个类有相似的行为，但某些步骤的具体实现可能不同的情况。通过定义一个模板方法，可以避免代码的重复，提高了代码的复用性和可维护性。
"""

from abc import ABC, abstractmethod


# 抽象类
class AbstractClass(ABC):
	def template_method(self):
		self.step1()
		self.step2()
		self.step3()

	@abstractmethod
	def step1(self):
		pass

	@abstractmethod
	def step2(self):
		pass

	@abstractmethod
	def step3(self):
		pass


# 具体子类A
class ConcreteClassA(AbstractClass):
	def step1(self):
		print("具体子类A - 步骤1实现")

	def step2(self):
		print("具体子类A - 步骤2实现")

	def step3(self):
		print("具体子类A - 步骤3实现")


# 具体子类B
class ConcreteClassB(AbstractClass):
	def step1(self):
		print("具体子类B - 步骤1实现")

	def step2(self):
		print("具体子类B - 步骤2实现")

	def step3(self):
		print("具体子类B - 步骤3实现")


# 客户端代码
if __name__ == "__main__":
	concrete_a = ConcreteClassA()
	concrete_a.template_method()

	print("")

	concrete_b = ConcreteClassB()
	concrete_b.template_method()
